package oneday.one;

import org.junit.Test;

/**
 * 创建泛型类
 * @author zpf
 * Created by ZPF on 2019/10/29.
 */
public class Demo4 {
    @Test
    public void func(){
        A<String> a1 =new A<String>();//创建对象时给类型变量赋值
        A<Integer> a2 = new A<Integer>();//每个对象可以给出不同的值
    }

}
/*
 * 类名称后给出尖括号，尖括号内给出类型变量
 * 如果是多个类型变量，使用逗号分隔
 *  命名要求：单个大学字母
 * 参数化类型：A<T>
 * 类型变量：T，它是一个变量，需要赋类型值。
 */
class A<T> {
    /*
     * 在类内，可以使用类型变量，在以下位置可以使用：
     *  * 实例成员类型上
     *  * 实例方法参数和返回值上
     *  * 构造器的参数类型上
     *
     *  * static的成员和方法上不能使用类型变量T
     */
    private T t;

    public A(T t){
        this.t = t;
    }
    public A(){

    }
    public T getT(){
        return this.t;
    }

    public void setT(T t){
        this.t = t;

    }

}

/*
 * 1. 定义泛型类，即给出类型变量
 * 2. 创建泛型类对象，即为类型变量赋值
 * 3. 类型变量在类内如何使用：
 *    >实例成员类型上
 *    >构造器参数类型上
 *    >实例方法的返回值类型和参数类型上
 *    >static的东西不能使用类型变量T
 */
